package test;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import org.dyndns.jkiddo.jetty.ProxyFilter;
import org.dyndns.jkiddo.jetty.extension.DmapConnector;
import org.dyndns.jkiddo.service.daap.client.IClientSessionListener;
import org.dyndns.jkiddo.service.daap.client.PairedRemoteDiscoverer;
import org.dyndns.jkiddo.service.daap.client.Session;
import org.dyndns.jkiddo.service.daap.client.UnpairedRemoteCrawler;
import org.dyndns.jkiddo.service.dacp.client.IPairingDatabase;
import org.dyndns.jkiddo.service.dacp.client.ITouchRemoteResource;
import org.dyndns.jkiddo.service.dacp.client.PairingDatabase;
import org.dyndns.jkiddo.service.dacp.client.TouchRemoteResource;
import org.dyndns.jkiddo.service.dacp.server.ITouchAbleServerResource;
import org.dyndns.jkiddo.service.dacp.server.TouchAbleServerResource;
import org.dyndns.jkiddo.service.dmap.CustomByteArrayProvider;
import org.dyndns.jkiddo.service.dmap.Util;
import org.dyndns.jkiddo.zeroconf.IZeroconfManager;
import org.dyndns.jkiddo.zeroconf.ZeroconfManagerImpl;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.name.Names;
import com.google.inject.servlet.GuiceFilter;
import com.google.inject.servlet.GuiceServletContextListener;
import com.sun.jersey.guice.JerseyServletModule;
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
public class StandaloneDACPTest {
public static void main(final String[] args) throws Exception {
System.setProperty("java.net.preferIPv4Stack", "true");
System.setProperty("java.net.preferIPv6Addresses", "false");
final Integer pairingCode = 7666;
final Integer hostingPort = 4321;
final String DB_NAME = "someDBName";
final String name = "myName";
final IClientSessionListener clientSessionListener = new IClientSessionListener() {
@Override
public void tearDownSession(final String server, final int port) {
// TODO Auto-generated method stub
}
@Override
public void registerNewSession(final Session session) throws Exception {
// TODO Auto-generated method stub
System.out.println("New session started: " + session);
}
};
final Injector injector = Guice.createInjector(new JerseyServletModule(){
@Override
protected void configureServlets()
{
bind(String.class).annotatedWith(Names.named(Util.APPLICATION_NAME)).toInstance(name);
bind(Integer.class).annotatedWith(Names.named(TouchRemoteResource.DACP_CLIENT_PAIRING_CODE)).toInstance(pairingCode);
bind(Integer.class).annotatedWith(Names.named(TouchRemoteResource.DACP_CLIENT_PORT_NAME)).toInstance(hostingPort);
bind(Integer.class).annotatedWith(Names.named(TouchAbleServerResource.DACP_SERVER_PORT_NAME)).toInstance(hostingPort);
bind(Integer.class).annotatedWith(Names.named(UnpairedRemoteCrawler.SERVICE_PORT_NAME)).toInstance(hostingPort);
bind(IZeroconfManager.class).toInstance(new ZeroconfManagerImpl());
bind(String.class).annotatedWith(Names.named(PairingDatabase.NAME_OF_DB)).toInstance(DB_NAME);
bind(IPairingDatabase.class).to(PairingDatabase.class).asEagerSingleton();
bind(PairedRemoteDiscoverer.class).asEagerSingleton();
// bind(UnpairedRemoteCrawler.class).asEagerSingleton();
bind(ITouchRemoteResource.class).to(TouchRemoteResource.class);
bind(ITouchAbleServerResource.class).to(TouchAbleServerResource.class);
bind(IClientSessionListener.class).toInstance(clientSessionListener);
bind(SomeJerseyServlet.class).asEagerSingleton();
bind(CustomByteArrayProvider.class);
filter("*").through(ProxyFilter.class);
serve("/*").with(GuiceContainer.class);
}
});
final Server server = new Server(hostingPort);
final Connector dmapConnector = new DmapConnector();
dmapConnector.setPort(hostingPort);
server.setConnectors(new Connector[] { dmapConnector });
final ServletContextHandler sch = new ServletContextHandler(server, "/");
sch.addEventListener(new GuiceServletContextListener() {
@Override
protected Injector getInjector() {
return injector;
}
});
sch.addFilter(GuiceFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
sch.addServlet(DefaultServlet.class, "/");
server.start();
System.out.println("");
}
}